/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.geotools.visualizadorsig.view;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import org.geotools.data.FileDataStore;
import org.geotools.data.FileDataStoreFinder;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.map.DefaultMapContext;
import org.geotools.map.FeatureLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.map.MapContext;
import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.styling.SLD;
import org.geotools.styling.Style;
import org.geotools.styling.StyleImpl;
import org.geotools.swing.JMapFrame;
import org.geotools.swing.JMapPane;
import org.geotools.swing.data.JFileDataStoreChooser;

/**
 *
 * @author Ciro Marx
 */
public class JanelaPrincipal extends org.geotools.visualizadorsig.view.JMapFrame {

    private JButton abrirShapeJButton;
    private JToolBar barraFerramentasJToolBar;

    public JanelaPrincipal() throws IOException {
        setTitle("Visualizador SIG");
        enableLayerTable(true);
        enableToolBar(true);
        enableStatusBar(true);
        inicializaComponentes(); // constrói componentes
        inicializaEventos(); // adiciona eventos de botões
        setVisible(true);        
    }

    private void inicializaComponentes() throws IOException {
        //enableInputMethods(true);
        // posição e tamanho da tela
        setExtendedState(MAXIMIZED_BOTH);
        setSize(600, 400);
        setLocationRelativeTo(null);

        abrirShapeJButton = new JButton();

        // adiciona a imagem do ícone do botão de abrir shape
        try {
            String path = new java.io.File(".").getCanonicalPath();
            abrirShapeJButton.setIcon(new ImageIcon(path + "/src/main/java/org/geotools/visualizadorsig/view/images/abrir2.png"));
        } catch (Exception e) {
            System.out.println("Nao pode achar o arquivo do icone");
        }
        // Adiciona mensagem de explicação sobre o que é o botão
        abrirShapeJButton.setToolTipText("Clique neste botão para abrir um arquivo shape.");

        barraFerramentasJToolBar = getToolBar();
        // Adiciona o botão de abrir o shape à barra de ferramentas
        if (getToolBar() != null) {
            getToolBar().addSeparator();
            getToolBar().add(abrirShapeJButton);
            getToolBar().setVisible(true);
        }

        // Altera a aparência da janela para a do Sistema atual
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void inicializaEventos() {
        abrirShapeJButton.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                try {
                    abrirMapa();
                } catch (IOException ex) {
                }
            }
        });
    }

    /*
     * TODO: melhorar método, o método faz com que o shape seja aberto
     * numa mesma janela. Isso já está acontecendo, mas a barra de status e
     * de ferramentas soome depois disso. Verificar o porque. Da forma feita,
     * não está sendo mostrada a animação de carregamento do shape.
     *
     */
    public void abrirMapa() throws IOException {
        // exibe janela de selecionar arquivo para abrir o shape
        File file = JFileDataStoreChooser.showOpenFile("shp", null);
        if (file != null) {
            FileDataStore store = FileDataStoreFinder.getDataStore(file);
            SimpleFeatureSource featureSource = store.getFeatureSource();

            //uma forma de fazer que funciona
//            MapContext map = new DefaultMapContext();
//            map.addLayer(featureSource, null);
//            getMapPane().removeAll();
//            JMapPane mapPane = new JMapPane(new StreamingRenderer(), map);
//            mapPane.setBackground(Color.WHITE);
//            getContentPane().add(mapPane);
//            setSize(601, 400);

            // tentando de uma outra forma para fazer a toolbar aparecer
            // depois que carrega o shape
            MapContext map = new DefaultMapContext();
            map.addLayer(featureSource, null);
            getMapPane().removeAll();
            JMapPane mapPane = new JMapPane(new StreamingRenderer(), map);
            mapPane.setBackground(Color.WHITE);
            add(mapPane);

            //acão de redimensionamento de 1 unidade da largura da janela
            // no intuito de atualizar automaticamente a abertura do shape
            setSize(601, 400);

            // faz com que a imagem do mappane seja atualizada em tempo real
            // sem ser necessário redimensionamento da janela
            getMapPane().reset();
            //repaint();
        }
        return;
    }
}
